<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /*
          创建对象的方式
            1.字面量方式创建对象
                + var obj = {...}
                + 可以后期动态添加
            2.内置构造函数创建对象
                + var obj = new Object()
                + 可以后期动态添加
            3.工厂函数创建对象
                3-1.制造一个工厂函数
                3-2.使用工厂函数去创建对象
            4.自定义构造函数创建对象
                4-1.制造一个自定义构造函数
                4-2.使用自定义构造函数去创建对象

        */

        // // 1.字面量方式创建对象
        // var obj = {
        //     name:'jack',
        //     age:'18',
        //     sayHi:function(){
        //         console.log('hello world')
        //     }
        // }

        // // 如果我想创建第二个对象
        // var obj2 = {
        //     name:'Rose',
        //     age:'20',
        //     sayHi:function(){
        //         console.log('hello wordl')
        //     }
        // }





        // // 2.内置构造函数创建对象
        // var obj = new Object()
        // obj.name = 'jack'
        // obj.age = 18
        // obj.sayHi = function(){
        //     console.log('hello world')
        // }





        // // 3.工厂函数创建对象
        // // 3-1.创建工厂函数
        // function createObj(name,age){
        //     // 手动创建一个对象
        //     var obj = {}

        //     // 手动向里面添加属性
        //     obj.name = name
        //     obj.age = age
        //     obj.sayHi = function(){
        //         console.log('hello world')
        //     }

        //     // 手动返回这个对象
        //     return obj
        // }

        // // 3-2.使用工厂函数去创建对象
        // var obj1 = createObj('jack',18)
        // var obj2 = createObj('rose',20)
        // console.log(obj1,obj2)





        // 4.自定义构造函数创建对象
        // 4-1.制造一个自定义构造函数
        // 构造函数会自动创建对象，自动返回这个对象
        // 我们只需要手动向里面添加内容就可以了
        function createObj(name,age){
            // 自动创建对象

            // 手动向对象里面添加成员
            // 这里的this指向当前实例（new 前面的变量）
            this.name = name
            this.age = age
            this.satHi = function(){console.log('hello world')}

            // 自动返回对象
        }
        // 4-2.使用自定义构造函数去创建对象
        // 构造函数在使用的时候，需要和 new 关键字连用
        // 如果不连用，那么没意义
        
        // 第一次调用 createObj 的时候，和 new 关键字连用了
        // 我们 createObj 里面的 this 指向了 obj1
        // 函数内部的代码在执行的时候，就是在 obj1 添加了 name age 和 sayHi 三个成员
        var obj1 = new createObj('jack',18)
        // 当第二次调用 createObj 的时候，和 new 关键字连用了
        // 我们的 createObj 里面的 this 指向了obj2
        // 函数内部的代码在执行的时候，就是向obj2添加了 name age 和 sayHi 三个成员
        var obj2 = new createObj('rose',20)

        console.log(obj1,obj2)
    </script>
</body>
</html>